inspector: Fix child widget life cycle
authorTimm Bäder <mail@baedert.org>
Sun, 22 Mar 2020 14:41:21 +0000 (15:41 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 24 Mar 2020 09:44:06 +0000 (10:44 +0100)
unparent them in dispose

gtk/inspector/general.c
gtk/inspector/misc-info.c
gtk/inspector/prop-list.c
gtk/inspector/visual.c

index de3d9a6670adb42d23d087924c562ce65af17e13..2d3e0ef001b7288b6ed19f276dcadbf96bb16a32 100644 (file)
@@ -31,6 +31,7 @@
 #include "gtkimage.h"
 #include "gtkadjustment.h"
 #include "gtkbox.h"
+#include "gtkbinlayout.h"
 
 
 #ifdef GDK_WINDOWING_X11
@@ -881,34 +882,13 @@ gtk_inspector_general_constructed (GObject *object)
 }
 
 static void
-measure (GtkWidget      *widget,
-         GtkOrientation  orientation,
-         int             for_size,
-         int            *minimum,
-         int            *natural,
-         int            *minimum_baseline,
-         int            *natural_baseline)
+gtk_inspector_general_dispose (GObject *object)
 {
-  GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (widget);
+  GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (object);
 
-  gtk_widget_measure (gen->priv->swin,
-                      orientation,
-                      for_size,
-                      minimum, natural,
-                      minimum_baseline, natural_baseline);
-}
+  g_clear_pointer (&gen->priv->swin, gtk_widget_unparent);
 
-static void
-size_allocate (GtkWidget *widget,
-               int        width,
-               int        height,
-               int        baseline)
-{
-  GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (widget);
-
-  gtk_widget_size_allocate (gen->priv->swin,
-                            &(GtkAllocation) { 0, 0, width, height },
-                            baseline);
+  G_OBJECT_CLASS (gtk_inspector_general_parent_class)->dispose (object);
 }
 
 static void
@@ -918,9 +898,7 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
   object_class->constructed = gtk_inspector_general_constructed;
-
-  widget_class->measure = measure;
-  widget_class->size_allocate = size_allocate;
+  object_class->dispose = gtk_inspector_general_dispose;
 
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/general.ui");
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, swin);
@@ -951,6 +929,8 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_composited);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_rgba);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, device_box);
+
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 void
index c4eaa54ca834c3e8e935705c2c947a0e5a1ce286..659960d7b8020c5a6b10e009bc160796d72ea8a5 100644 (file)
@@ -31,6 +31,7 @@
 #include "gtkbutton.h"
 #include "gtkmenubutton.h"
 #include "gtkwidgetprivate.h"
+#include "gtkbinlayout.h"
 
 
 struct _GtkInspectorMiscInfoPrivate {
@@ -570,34 +571,13 @@ set_property (GObject      *object,
 }
 
 static void
-measure (GtkWidget      *widget,
-         GtkOrientation  orientation,
-         int             for_size,
-         int            *minimum,
-         int            *natural,
-         int            *minimum_baseline,
-         int            *natural_baseline)
+dispose (GObject *o)
 {
-  GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (widget);
+  GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (o);
 
-  gtk_widget_measure (sl->priv->swin,
-                      orientation,
-                      for_size,
-                      minimum, natural,
-                      minimum_baseline, natural_baseline);
-}
+  g_clear_pointer (&sl->priv->swin, gtk_widget_unparent);
 
-static void
-size_allocate (GtkWidget *widget,
-               int        width,
-               int        height,
-               int        baseline)
-{
-  GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (widget);
-
-  gtk_widget_size_allocate (sl->priv->swin,
-                            &(GtkAllocation) { 0, 0, width, height },
-                            baseline);
+  G_OBJECT_CLASS (gtk_inspector_misc_info_parent_class)->dispose (o);
 }
 
 static void
@@ -608,11 +588,10 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass)
 
   object_class->get_property = get_property;
   object_class->set_property = set_property;
+  object_class->dispose = dispose;
 
   widget_class->map = map;
   widget_class->unmap = unmap;
-  widget_class->measure = measure;
-  widget_class->size_allocate = size_allocate;
 
   g_object_class_install_property (object_class, PROP_OBJECT_TREE,
       g_param_spec_object ("object-tree", "Object Tree", "Object tree",
@@ -669,6 +648,8 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, show_surface);
   gtk_widget_class_bind_template_callback (widget_class, show_renderer);
   gtk_widget_class_bind_template_callback (widget_class, show_frame_clock);
+
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 // vim: set et sw=2 ts=2:
index 69282bd7cea5b14046fad425b6d97b444ae06cf3..df1450e6efdbb628d8d4581fd2ad401dcb111695 100644 (file)
@@ -262,11 +262,6 @@ finalize (GObject *object)
 
   cleanup_object (pl);
 
-  g_object_unref (pl->priv->names);
-  g_object_unref (pl->priv->types);
-  g_object_unref (pl->priv->values);
-  g_object_unref (pl->priv->origins);
-
   G_OBJECT_CLASS (gtk_inspector_prop_list_parent_class)->finalize (object);
 }
 
index 8136fc3396fe9befc056f852ed2b1ddfff18adf9..46349bd5957c06bf227d36cae970b39833bc2f13 100644 (file)
@@ -41,6 +41,7 @@
 #include "gskdebugprivate.h"
 #include "gskrendererprivate.h"
 #include "gtknative.h"
+#include "gtkbinlayout.h"
 
 #include "fallback-c89.c"
 
@@ -1081,6 +1082,16 @@ gtk_inspector_visual_constructed (GObject *object)
    g_signal_connect (vis->priv->misc_box, "row-activated", G_CALLBACK (row_activated), vis);
 }
 
+static void
+gtk_inspector_visual_dispose (GObject *object)
+{
+  GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (object);
+
+  g_clear_pointer (&vis->priv->swin, gtk_widget_unparent);
+
+  G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->dispose (object);
+}
+
 static void
 gtk_inspector_visual_finalize (GObject *object)
 {
@@ -1099,37 +1110,6 @@ gtk_inspector_visual_finalize (GObject *object)
   G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->finalize (object);
 }
 
-static void
-measure (GtkWidget      *widget,
-         GtkOrientation  orientation,
-         int             for_size,
-         int            *minimum,
-         int            *natural,
-         int            *minimum_baseline,
-         int            *natural_baseline)
-{
-  GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (widget);
-
-  gtk_widget_measure (vis->priv->swin,
-                      orientation,
-                      for_size,
-                      minimum, natural,
-                      minimum_baseline, natural_baseline);
-}
-
-static void
-size_allocate (GtkWidget *widget,
-               int        width,
-               int        height,
-               int        baseline)
-{
-  GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (widget);
-
-  gtk_widget_size_allocate (vis->priv->swin,
-                            &(GtkAllocation) { 0, 0, width, height },
-                            baseline);
-}
-
 static void
 gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
 {
@@ -1137,11 +1117,9 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   object_class->constructed = gtk_inspector_visual_constructed;
+  object_class->dispose = gtk_inspector_visual_dispose;
   object_class->finalize = gtk_inspector_visual_finalize;
 
-  widget_class->measure = measure;
-  widget_class->size_allocate = size_allocate;
-
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/visual.ui");
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, swin);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, box);
@@ -1182,6 +1160,8 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, widget_resize_activate);
   gtk_widget_class_bind_template_callback (widget_class, focus_activate);
   gtk_widget_class_bind_template_callback (widget_class, software_gl_activate);
+
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 void